#!/bin/bash
#设置任务异常退出
set -eo pipefail
dt='{{ execution_date | date_add(1) | cst_ds }}'
name='退件面单分析'
# 在退出时清理文件
trap "rm -f /tmp/${name}_${dt}.zip /tmp/${name}_${dt}.csv && echo 'removed tmp files'" EXIT
# 创建txt文件
touch /tmp/${name}_${dt}.txt
#将中文字段名输入文件顶部
#将查询结果追加到文件中
{
  echo -e "运单号\t订单来源编码\t订单来源名称\t登记时间\t登记网点编码\t登记网点名称\t登记网点所属代理区编码\t登记网点所属代理区名称\t打印时间\t打印网点编码\t打印网点名称\t打印网点所属代理区编码\t打印网点所属代理区名称\t操作类型\t问题件一级类型编码\t问题件一级类型名称\t问题件二级类型编码\t问题件二级类型名称\t问题件原因描述\t问题件登记时间\t问题件登记次数\t问题件首次回复时间\t回复时长\t问题件接收网点编码\t问题件接收网点名称\t问题件接收网点所属代理区编码\t问题件接收网点所属代理区名称\t是否有客诉\t客户投诉原因\t">/tmp/${name}_${dt}.txt;
  spark-sql --driver-memory 4G --num-executors 4 --executor-memory 4g --executor-cores 6  --conf spark.executor.memoryOverhead=4g --conf spark.driver.maxResultSize=3g -S -e "
  select
        waybill_no
       ,order_source_code
       ,order_source_name
       ,register_time
       ,register_network_code
       ,register_network_name
       ,register_agent_code
       ,register_agent_name
       ,print_time
       ,print_network_code
       ,print_network_name
       ,print_agent_code
       ,print_agent_name
       ,print_network_type
       ,proble_first_type_code
       ,proble_first_type_name
       ,proble_second_type_code
       ,proble_second_type_name
       ,proble_description
       ,proble_register_date
       ,proble_register_cnt
       ,proble_first_reply_time
       ,proble_reply_time
       ,proble_receive_network_code
       ,proble_receive_network_name
       ,proble_receive_agent_code
       ,proble_receive_agent_name
       ,if_work
       ,work_reason
   from jms_dm.dm_reback_analyse_detail_dt
   where dt = '{{ execution_date | cst_ds }}';
 " >>/tmp/${name}_${dt}.txt
}

# 替换分隔符，并输出csv
cat /tmp/${name}_${dt}.txt | tr -s '\t' ',' > /tmp/${name}_${dt}.csv
# 压缩并删除 csv 文件
zip -jrm /tmp/${name}_${dt}.zip /tmp/${name}_${dt}.csv
# 上传文件
/usr/local/python3/bin/python3  /usr/local/airflow/dags/utils/operators/upload_oss.py ${name}/${name}_${dt}.zip /tmp/${name}_${dt}.zip
# zip 文件将在进程退出后被自动清理

#声明文件大小
data_size=$(ls -lh /tmp/${name}_${dt}.zip | awk '{print $5}')
#打印文件信息
Message="${name}_${dt}.zip 上传成功 大小: $data_size"
#配置钉钉告警
curl 'https://oapi.dingtalk.com/robot/send?access_token=816a8f35fd84432ffa6bff9d7714abc322628bb4a8ded86908550d2335aba613' \
   -H 'Content-Type: application/json' \
   -d "
  {\"msgtype\": \"text\",
    \"text\": {
        \"content\": \"监控内容:$Message\"
     }
  }" || true
rm -f  /tmp/${name}_${dt}.txt